<?php

declare(strict_types=1);

namespace app\model;

use app\common\service\pay\alipay\AliPayWap;
use app\common\service\pay\wechat\H5;
use app\common\service\pay\wechat\JsApi;

/**
 * 
 *
 * @mixin \think\Model
 * @property int $id 自增ID
 * @property int $agent_id 代理商id
 * @property int $channel_id 渠道id
 * @property int $user_id 用户ID
 * @property int $pay_channel 支付渠道：1微信支付 2支付宝支付
 * @property int $order_id 订单号
 * @property string $trade_no 第三方支付流水号
 * @property string $trade_type 交易类型：MWEB - H5支付，JSAPI支付
 * @property string $mobile 手机号
 * @property int $amount 充值金额。单位：分
 * @property float $sale_discount 销售折扣
 * @property int $sale_price 实际支付金额。单位：分
 * @property float $settle_discount 结算折扣
 * @property int $settle_price 结算价。单位：分
 * @property int $real_pay_price 实际支付金额：微信回调金额。单位：分
 * @property int $status 状态：1未支付 2已支付 3已取消 4支付失败
 * @property string $remark 充值备注
 * @property string $created_at 创建时间
 * @property string $updated_at 更新时间
 * @property int $settle_type 结算方式：1返佣 2预付
 * @property int $refund_amount 已退款总金额【退给用户的钱】。单位：分
 * @property int $refund_settle_amount 退款总金额【退款给代理商的 预充的才需要】。单位：分
 * @property int $type 类型：1话费充值 2代理商充值
 * @property-read \app\model\AgentBalanceLog $balance_log
 * @property-read \app\model\CouponOrder $couponOrder
 * @property string $out_no 出口编号
 * @property-read \app\model\CouponOrder $coupon_order
 */
class PayLog extends CommonModel
{
    const PAY_CHANNEL_WECHAT = 1;
    const PAY_CHANNEL_ALIPAY = 2;


    const STATUS_NO = 1;
    const STATUS_PAY = 2;
    const STATUS_CANCLE = 3;
    const STATUS_FAIL = 4;
    const STATUS_REFUND = 5;

    /**
     * 支付方法
     * @return string[]
     */
    public function payMethond()
    {
        return [
            'H5' => H5::class,
            'JsApi' => JsApi::class,
            'AliPayWap' => AliPayWap::class,
        ];
    }

    public function balanceLog()
    {
        return $this->hasOne(AgentBalanceLog::class, 'quote_id');
    }


    public function couponOrder()
    {
        return $this->hasOne(CouponOrder::class, 'order_id', 'order_id');
    }

    /**
     * 支付方式转化
     */
    public function payMethondConvert($trade_type = '')
    {

        $methond = $this->payMethond();


        foreach ($methond as $key => $class) {
            $obj = new $class();
            /** @var H5 $obj */
            if ($obj->trade_type == $trade_type) {
                return $class;
            };
        }

        return false;

    }


}
